<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="./styles_main.css" />
<title>Expanding snippets</title>
</head><body>

<ul class="primary-links">
  <li><a href="./index.html">Intro and tutorial</a></li>
  <li><a href="./snippet-organization.html">Howto: organize</a></li>
  <li><a href="./snippet-expansion.html">Howto: expand</a></li>
  <li><a href="./snippet-development.html">Howto: write</a></li>
  <li><a href="./snippet-menu.html">Howto: menu</a></li>
  <li><a href="./faq.html">FAQ</a></li>
  <li><a href="http://yasnippet.googlecode.com/svn/trunk/doc/changelog.html">ChangeLog</a></li>
  <li><a href="http://code.google.com/p/yasnippet/downloads/list">Download</a></li>
</ul>

<p class="original">原文： <a href="http://yasnippet.googlecode.com/svn/trunk/doc/snippet-expansion.html">http://yasnippet.googlecode.com/svn/trunk/doc/snippet-expansion.html</a>
<span class="translated-date">(translated on 2010/Dec/21)</span>
<a class="link-to-editors-room" href="http://code.google.com/p/yasnippet-doc-jp/">⇒ 翻訳プロジェクト</a>
</p>

<h1>Expanding snippets</h1>

<p class="notice"><strong>〔重要〕</strong> このドキュメントは YASnippet の <strong>SVN trunk</strong> に対して適用されるものです。
SVN trunk は<a href="http://code.google.com/p/yasnippet/source/checkout">こちら</a>から取得できます。
他のバージョンに対するドキュメントは<a href="から取得できます。">こちら</a>で見られます。
</p>

<ul class="toc">
  <li>
    <a href="#triggering-expansion">Triggering expansion</a>
    <ul>
      <li>
        <a href="#trigger-key">Trigger key</a>
        <ul>
          <li><a href="#fallback-behavior">Fallback behavior</a></li>
        </ul>
      </li>
      <li><a href="#insert-at-point">Insert at point</a></li>
      <li><a href="#snippet-keybinding">Snippet keybinding</a></li>
      <li><a href="#expanding-from-the-menu">Expanding from the menu</a></li>
      <li><a href="#expanding-with-hippie-expand">Expanding with <code>hippie-expand</code></a></li>
      <li><a href="#expanding-from-emacs-lisp-code">Expanding from emacs-lisp code</a></li>
    </ul>
  </li>
  <li>
    <a href="#controlling-expansion">Controlling expansion</a>
    <ul>
      <li><a href="#eligible-snippets">Eligible snippets</a></li>
      <li><a href="#the-condition-system">The condition system</a></li>
      <li>
        <a href="#multiples-snippet-with-the-same-key">Multiples snippet with the same key</a>
        <ul>
          <li><a href="#use-the-x-window-system">Use the X window system</a></li>
          <li><a href="#minibuffer-prompting">Minibuffer prompting</a></li>
          <li><a href="#use-dropdown-menu-el">Use <code>dropdown-menu.el</code></a></li>
          <li><a href="#roll-your-own">Roll your own</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <a href="#customizable-variables">Customizable Variables</a>
    <ul>
      <li><a href="#yas-prompt-functions"><code>yas/prompt-functions</code></a></li>
      <li><a href="#yas-fallback-behavior"><code>yas/fallback-behavior</code></a></li>
      <li><a href="#yas-choose-keys-first"><code>yas/choose-keys-first</code></a></li>
      <li><a href="#yas-choose-tables-first"><code>yas/choose-tables-first</code></a></li>
      <li><a href="#yas-key-syntaxes"><code>yas/key-syntaxes</code></a></li>
    </ul>
  </li>
</ul>

<div class="contents">

<h2 id="triggering-expansion">展開のトリガ</h2>

<p>YASnippet でスニペットを展開するのには、さまざまなやり方があります：
</p>

<ul>
  <li>
    <p>省略形（スニペットの <em>trigger key</em>）をタイプし、<code>yas/trigger-key</code> に定義されているキーを押す（デフォルトでは TAB キー）。
    この手順はマイナーモード <code>yas/minor-mode</code> が有効なバッファで利用できます。
    </p>
  </li>
  <li>
    <p>コマンド <code>yas/insert-snippet</code> を実行する（<code>M-x yas/insert-snippet</code> とタイプするか、キーバインドを使う）。
    この手順は <code>yas/minor-mode</code> が有効であることを<em>必要としません。</em>
    </p>
  </li>
  <li>
    <p>有効なスニペットに割り当てられているキーバインドを使う。
    この手順もまた <code>yas/minor-mode</code> が有効でなければなりません。
    </p>
  </li>
  <li>
    <p>メニューバーにある &quot;YASnippet&quot; メニューから直接展開する。
    </p>
  </li>
  <li>
    <p>hippie-expand を使う。
    </p>
  </li>
  <li>
    <p>emacs-lisp コードから展開する。
    </p>
  </li>
</ul>

<h3 id="trigger-key">Trigger key</h3>

<p><code>yas/minor-mode</code> が有効になると、<code>yas/trigger-key</code> で与えられるキーバインドが有効になります。
</p>

<p><code>yas/trigger-key</code> で指定されたキーバインドは、関数 <code>yas/expand</code> を呼び出します。
これは、カーソル位置の直前にある <em>スニペット省略形</em>（あるいは <em>snippet key</em> とも呼ばれます）を展開しようとします。
</p>

<p>デフォルトのキーは TAB ですが、自由に他のキーに設定することができます。
</p>

<img class="screenshot" src="./minor-mode-indicator.png" alt="a sample of mode line" />

<p>すべてのバッファで YASnippet マイナーモードを有効にするには、<code>yas/global-mode</code> コマンドを使います。
</p>

<p><code>yas/global-mode</code> を使っているが、あるバッファでは YASnippet を無効化したい、というときには、そのバッファのモードのフックでバッファローカル変数 <code>yas/dont-active</code> を設定してください。
</p>

<p><code>yas/trigger-key</code> の利用とその理解にまつわるトラブルは、YASnippet でもっとも頻繁に話題になっているものです。
<a href="./faq.html">FAQ</a> を参照してください。
</p>

<h4 id="fallback-behavior">スニペットが展開できなかったときのふるまい</h4>

<p><code>yas/fallback-behavior</code> は設定可能な変数で、デフォルトでは <code>'call-other-command</code> に束縛されています。
展開すべきスニペットを <code>yas/expand</code> が見つけられなかった場合、マイナーモードを一時的に無効にして、<code>yas/trigger-key</code> に割り当てられている他のコマンドがないか探します。
</p>

<p>もし他のコマンドが見つかった場合、その見つかったコマンドが呼ばれます。
たいていの場合、この仕組みはとてもうまく機能します。
スニペットがあったらそれを展開し、そうでなければ trigger key にもともと割り当てられていたコマンドを呼ぶ、というわけです。
</p>

<p>また一方で、変数 <code>yas/fallback-behavior</code> をカスタマイズすることで、この挙動を変えることができます。
この変数の値を <code>'return-nil</code> に設定すると、スニペットが見つからなかったときに<em>もともとの</em>コマンドを呼ぶ代わりに <code>nil</code> を返すようになります。
</p>

<h3 id="insert-at-point">カーソル位置への挿入</h3>

<p>コマンド <code>M-x yas/insert-snippet</code> は、<em>現在のメジャーモードにしたがって、</em>スニペットをカーソル位置に挿入しようとします。
このコマンドを実行すると、最初に、snippet key （訳注：スニペット省略形）の入力をうながすプロンプトが表示されます。
同じ snippet key に対して複数のテンプレートがある場合、続けてスニペットテンプレートの選択をうながすプロンプトが表示されます。
</p>

<p>ここで表示されるリストには、現在のカーソル位置に挿入可能なスニペットが載っています。
どのスニペットが挿入可能なのかは<a href="#the-condition-system">条件判断システム（後述）</a>にしたがいます。
現在のメジャーモードに対して適用可能なすべてのスニペットを見たいときには、コマンドの前に <code>C-u</code> を付けてください。
</p>

<p>入力をうながすプロンプトを表示するメソッドは、これもまた、<code>yas/prompt-functions</code> によって制御されています。
</p>

<h3 id="snippet-keybinding">スニペットのキーバインド</h3>

<p><a href="./snippet-development.html#binding-direct-keybinding">&quot;Writing Snippets&quot; の章の <code># binding:</code> ディレクティブの節</a>を参照してください。
</p>

<h3 id="expanding-from-the-menu">メニューからの展開</h3>

<p><a href="./snippet-menu.html">&quot;the YASnippet Menu&quot; の章</a>を参照してください。
</p>

<h3 id="expanding-with-hippie-expand"><code>hippie-expand</code> での展開</h3>

<p><code>hippie-expand</code> と統合したい場合、リスト <code>hippie-expand-try-functions-list</code> の中に <code>yas/hippie-try-expand</code> を置くだけです。
ただし、リストの先頭に置いた場合、他の意味も持ってしまうかもしれません。
いずれにしても、あなたの好きな位置に置くことができます。
</p>

<h3 id="expanding-from-emacs-lisp-code">emacs-lisp コードからの展開</h3>

<p>時には、Emacs-Lisp コードから直接、スニペットを展開したいことがあるかもしれません。
そんなときは <code>yas/expand</code> の代わりに <code>yas/expand-snippet</code> を呼ぶようにしてください。
</p>

<p>メニューバーから展開するのと同様に、条件判断システムおよび複数候補は展開に影響しなくなります。
実際、YASnippet メニューからの展開は、以下のコードの評価とまったく同じ効果を持っています：

<div class="highlight"><pre>(<span style="color: #19177C">yas/expand-snippet</span> <span style="color: #19177C">template</span>)
</pre></div>

<p>もっと情報が必要な場合は <code>yas/expand-snippet</code> の内部ドキュメントを参照してください。
</p>

<h2 id="controlling-expansion">展開を制御する</h2>

<h3 id="eligible-snippets">ふさわしいスニペット</h3>

<p>現在のカーソル位置に展開できるスニペットはどれか、を見つけ出すために、YASnippet はかなりのフィルタリングをします。
</p>

<p>具体的に言うと、以下のものが関係します：
</p>

<dl>
  <dt>・現在読み込み済みの snippet table</dt>
  <dd>
    <p>あなたのファイルシステムのディレクトリ階層構造から読みだされる情報です。
    <a href="./snippet-organization.html">&quot;Organizing Snippets&quot; の章</a>を参照してください。
    これらのテーブルは、&quot;<code>html-mode</code>&quot; や &quot;<code>ruby-mode</code>&quot; のように、メジャーモードにちなんだ名前を付けられています。
    </p>
  </dd>
  <dt>・現在のバッファのメジャーモード</dt>
  <dd>
    <p>現在のメジャーモードが読み込み済みの snipet table のひとつにマッチした場合、
    そのテーブルにあるすべてのスニペットが展開の対象となります。
    現在のメジャーモードを確認するためには、<code>M-x describe-variable RET major-mode RET</code> を使ってください。
    </p>
  </dd>

  <dt>・Parent table</dt>
  <dd>
    <p>展開可能な他のテーブルの親として定義されている snippet table もまた、展開可能とみなされます。
    この解釈は再帰的に行われます。つまり、展開可能なテーブルの親の親もまた展開可能とみなされます。
    </p>
  </dd>

  <dt>・バッファローカルな変数 <code>yas/mode-symbol</code></dt>
  <dd>
    <p>この変数を使うと、メジャーモードに一致しない名前の snippet table を展開可能とみなすようにすることができます。
    この変数に適当なモード名を設定すると（たとえば <code>rinari-minor-mode</code> とか）、そのモードでしか展開されないスニペットを使うことができます。
    もちろん、この設定を条件によって切り替えたいと思うこともあるでしょう（たとえば、あるマイナーモードに入った時にだけ、など）。
    そんなときはフックを使うのがよいアイディアです。
    </p>
<div class="highlight"><pre><span style="color: #408080; font-style: italic">;; When entering rinari-minor-mode, consider also the snippets in the</span>
<span style="color: #408080; font-style: italic">;; snippet table &quot;rails-mode&quot;</span>
(<span style="color: #19177C">add-hook</span> <span style="color: #19177C">&#39;rinari-minor-mode-hook</span>
          <span style="color: #0000FF">#&#39;</span>(<span style="color: #008000; font-weight: bold">lambda</span> ()
              (<span style="color: #008000; font-weight: bold">setq</span> <span style="color: #19177C">yas/mode-symbol</span> <span style="color: #19177C">&#39;rails-mode</span>)))
</pre></div>
  </dd>

  <dt>・バッファローカルな変数 <code>yas/buffer-local-condition</code></dt>
  <dd>
    <p>この変数を使うと、現在のバッファ内でどのスニペットが展開可能かをより細かい粒度で制御することができます。
    たとえば、デフォルトでは、コメントおよび文字列リテラルの中ではスニペットを展開しないようになっています。
    詳細については <a href="#the-condition-system">&quot;The condition system&quot; の節</a>を参照してください。
    </p>
  </dd>
</dl>

<h3 id="the-condition-system">The condition system</h3>

<p>次のシナリオを考えてみてください：
あなたはベテランの Emacs ハッカーです。
あなたは省略表記を好んでいて、<code>yas/trigger-key</code> に &quot;<code>SPC</code>&quot; を設定しています。
また一方では、（たとえば <code>python-mode</code> などで）コメントブロックや文字列の中でタイプした &quot;<code>if</code>&quot; はスニペットとして展開してほしくありません。
</p>

<p><code># condition :</code> ディレクティブ（<a href="./snippet-development.html">&quot;Writing Snippets&quot; の章</a>を参照）を使っている場合、
<code>if</code> に対する条件として <code>(not (python-in-string/comment))</code> を指定するだけで済みます。
しかし、<code>while</code> や <code>for</code> などについてはどうでしょう？
すべてのスニペットに対して同じ条件を書くのは本当にうんざりするものです。
そんなわけで、YASnippet はバッファローカル変数 <code>yas/buffer-local-condition</code> を提供しています。
<code>python-mode-hook</code> の中で、この変数に <code>(not (python-in-string/comment))</code> を設定すればよいのです。
</p>

<p>次に、ある特定のスニペットだけはコメントの中でも展開できるようにしたいと思ったら、どうしたらよいでしょう？
これも実現可能です！
でも、話を進めるのを止めて、以下のルールをご覧ください：
</p>

<ul>
  <li>
    <p>もし、<code>yas/buffer-local-condition</code> を評価して nil になるなら、どのスニペットも展開可能とはみなされません。
    </p>
  </li>
  <li>
    <p>もし、評価した結果が<em>コンスセル</em>で、そのコンスセルの <code>car</code> 部がシンボル <code>require-snippet-condition</code> で、
    そのコンスセルの <code>cdr</code> 部がひとつのシンボル（これを <code>requirement</code> と呼ぶことにしましょう）である場合、
    </p>
    <ul>
      <li>
        <p><code># condition:</code> ディレクティブを持たないスニペットは、適用可能とはみなされません。
        </p>
      </li>
      <li>
        <p><code># condition:</code> ディレクティブの評価結果が nil だった（または評価中にエラーが起きた）スニペットは、展開可能とはみなされません。
        </p>
      </li>
      <li>
        <p>スニペットが <code># condition:</code> ディレクティブを持っていて、それを評価した値が nil 以外だった場合（その値を <code>result</code> と呼ぶことにしましょう）：
        </p>
        <ul>
          <li>
            <p>もし <code>requirement</code> が <code>t</code> なら、そのスニペットは展開可能である。
            </p>
          </li>
          <li>
            <p>もし <code>requirement</code> が <code>result</code> と <code>eq</code> なら（等しいなら）、そのスニペットは展開可能である。
            </p>
          </li>
          <li>
            <p>それ以外の場合、そのスニペットは展開可能とはみなされません。
            </p>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <p>もし、評価した結果がシンボル <code>always</code> だった場合、<code># condition:</code> ディレクティブに関係なく、すべてのスニペットは展開可能とみなされます。
    </p>
  </li>
  <li>
    <p>もし、評価した結果が <code>t</code> または他の non-nil な値だった場合：
    </p>
    <ul>
      <li>
        <p>もしスニペットが <code># condition:</code> ディレクティブを持っていないか、<code># condition:</code> ディレクティブを評価すると non-nil だった場合、
        そのスニペットは展開可能である。
        </p>
      </li>
      <li>
        <p>それ以外の場合、そのスニペットは展開可能とはみなされません。
        </p>
      </li>
    </ul>
  </li>
</ul>

<p>上で想定しているシナリオでは、<code>yas/buffer-local-condition</code> を以下のように設定してください：
</p>

<div class="highlight"><pre>(<span style="color: #19177C">add-hook</span> <span style="color: #19177C">&#39;python-mode-hook</span>
          <span style="color: #666666">&#39;</span>(<span style="color: #008000; font-weight: bold">lambda</span> ()
             (<span style="color: #008000; font-weight: bold">setq</span> <span style="color: #19177C">yas/buffer-local-condition</span>
                   <span style="color: #666666">&#39;</span>(<span style="color: #008000; font-weight: bold">if</span> (<span style="color: #19177C">python-in-string/comment</span>)
                        <span style="color: #666666">&#39;</span>(<span style="color: #19177C">require-snippet-condition</span> <span style="color: #666666">.</span> <span style="color: #19177C">force-in-comment</span>)
                      <span style="color: #880000">t</span>))))
</pre></div>

<p>・・・・また、コメントの中でも展開されてほしいスニペットの <code># condition:</code> ディレクティブは、シンボル <code>force-in-comment</code> に評価されるようにしてください。
こうすると、コメント中では、<code>if</code> のような他のスニペットは展開されないままで、あなたが展開したいスニペットだけは展開できるようになります。
</p>

<h3 id="multiples-snippet-with-the-same-key">同じキーに割り当てられた複数のスニペット</h3>

<p><a href="#eligible-snippets">上のほうで概要を述べた</a>ルールは、現在のカーソル位置に展開可能なスニペットを複数返すことがありえます。
</p>

<p>複数の候補が見つかったとき、YASnippet はあなたにひとつ選ばせるでしょう。
複数の候補を選択するためのユーザインタフェースは、<code>yas/prompt-functions</code> でカスタマイズすることができます。
この変数は、スニペットに対する入力プロンプトを表示するメソッドとして、あなたの好きなメソッドを指定するためのものです。
</p>

<p>これをカスタマイズするには、<code>M-x customize-variable RET yas/prompt-functions RET</code> としてください。
別のやり方として、あなたの emacs 設定ファイルに以下のコードを書いてください：
</p>

<div class="highlight"><pre>(<span style="color: #008000; font-weight: bold">setq</span> <span style="color: #19177C">yas/prompt-functions</span> <span style="color: #666666">&#39;</span>(<span style="color: #19177C">yas/x-prompt</span> <span style="color: #19177C">yas/dropdown-prompt</span>))
</pre></div>

<p>現在、YASnippet では、以下のいずれかの方法が利用可能です。
</p>

<h4 id="use-the-x-window-system">X window system を使う</h4>

<img class="screenshot" src="./x-menu.png" alt="a sample of menu with X window system" />

<p>関数 <code>yas/x-prompt</code> は、候補選択のためのポップアップメニューを表示します。
このメニューはあなたの使っているウインドウシステムのネイティブな部品 (widget) です。
すなわち：
</p>

<ul>
  <li>
    <p>見た目がきれいです。たとえば、gtk をサポートするように Emacs をコンパイルしたなら、このメニューは gtk のテーマにしたがって描画されるでしょう。
    </p>
  </li>
  <li>
    <p>このメニューでは Emacs による制御はほとんどできません。たとえば、<code>C-n</code> や <code>C-p</code> では操作できません。
    </p>
  </li>
  <li>
    <p>この関数はターミナル上では使えません。
    </p>
  </li>
</ul>

<h4 id="minibuffer-prompting">ミニバッファでのプロンプト表示</h4>

<img class="screenshot" src="./ido-menu.png" alt="a sample of minibuffer prompt with ido" />

<p>昔ながらの emacs の補完メソッドのための関数 <code>yas/completing-prompt</code> が使えます。
または、これよりずっと見た目のよい <code>yas/ido-prompt</code> も使えます。
一番いいのは実際に試してみることです。
この機能はターミナル上でも使えます。
</p>

<h4 id="use-dropdown-menu-el"><code>dropdown-menu.el</code> を使う</h4>

<img class="screenshot" src="./dropdown-menu.png" alt="a sample of dropdown prompt" />

<p>関数 <code>yas/dropdown-prompt</code> も <code>yas/prompt-functions</code> リストに書くことができます。
</p>

<p>これはウインドウシステム上でもターミナル上でも機能し、カスタマイズ可能で、<code>C-n</code> や <code>C-p</code> で操作でき、
<code>q</code> で quit でき、6番目の候補を選択するのに <code>6</code> を押すこともできます。
</p>

<h4 id="roll-your-own">自作する</h4>

<p>変数 <code>yas/prompt-functions</code> のドキュメントを参照してください。
</p>

<h2 id="customizable-variables">カスタマイズ可能な変数</h2>

<h3 id="yas-prompt-functions"><code>yas/prompt-functions</code></h3>

<p>関数を書いて、それをリスト <code>yas/prompt-functions</code> に追加することができます。
このリストに含まれている関数は、以下の引数で呼ばれます：
</p>
<ul>
  <li>PROMPT: ユーザに入力をうながすための文字列</li>
  <li>CHOICES: 文字列かオブジェクトのリスト</li>
  <li>optional DISPLAY-FN: 関数。CHOICES に含まれているオブジェクトのひとつに適用すると文字列が返される関数。</li>
</ul>

<p>リスト <code>yas/prompt-functions</code> に含めるすべての関数の返値は、CHOICES に含まれているオブジェクトのどれかでなければなりません。
また、（DISPLAY-FN 引数が渡されたときには）DISPLAY-FN で適切に整形されたものでなければなりません。
</p>

<ul>
  <li>
    <p>入力プロンプトのある特定のスタイルが一時的に使えないとき、その旨を伝えるために「nil を返す関数」を使うことができます。
    </p>
  </li>
  <li>
    <p>ユーザが入力プロンプトをキャンセルした場合、<code>(signal 'quit &quot;user quit!&quot;)</code> とすることで <code>quit</code> シグナルを伝えることができます。
    </p>
  </li>
</ul>

<h3 id="yas-fallback-behavior"><code>yas/fallback-behavior</code></h3>

<p><code>yas/expand</code> がスニペットを展開<em>しなかった</em>とき、どう振る舞えばよいか。
</p>

<p><code>call-other-command</code> は、一時的に YASnippet を無効にして、<code>yas/trigger-key</code> に割り当てられている次のコマンドを呼び出すことを意味します。
</p>

<p><code>return-nil</code> は nil を返す（つまり、何もしない）ことを意味します。
</p>

<p><code>(apply COMMAND .ARGS)</code> という形式のエントリは、
もし ARGS が non-nil だった場合は ARGS を引数として非対話的に COMMAND を呼び出し、
そうでなければ対話的に COMMAND を呼び出すことを意味します。
</p>

<h3 id="yas-choose-keys-first"><code>yas/choose-keys-first</code></h3>

<p>もし non-nil だった場合、最初に snippet key の入力プロンプトを表示し、次にテンプレートに対するプロンプトを表示します。
</p>

<p>そうでなければ、すべての展開可能なスニペット名に対するプロンプトを表示します。
</p>

<p>この変数は、<code>yas/insert-snippet</code> と <code>yas/visit-snippet-file</code> に影響を与えます。
</p>

<h3 id="yas-choose-tables-first"><code>yas/choose-tables-first</code></h3>

<p>もし non-nil だった場合で、かつ、複数の snippet table が適用可能と判定された場合、snippet table を選択するプロンプトを最初に表示します。
</p>

<p>それ以外の場合、すべての適用可能な snippet table を合体したものからユーザがスニペットを選択することになります。
</p>

<p>この変数は、<code>yas/insert-snippet</code> と <code>yas/visit-snippet-file</code> に影響を与えます。
</p>

<h3 id="yas-key-syntaxes"><code>yas/key-syntaxes</code></h3>

<p>デフォルトの検索の戦略は、きわめて強力です。
たとえば、<code>c-mode</code> において、<code>bar</code> と <code>foo_bar</code> と <code>&quot;#foo_bar&quot;</code> は、いずれも snippet key として認識されます。
さらに、検索はこの順序で行われます。
つまり、<code>bar</code> がある<em>展開可能な</em>スニペットへの key であることがわかったとき、そのスニペットが展開されて <code>bar</code> を置き換えます。
このとき、<code>foo_bar</code> や <code>&quot;#foo_bar&quot;</code> を key とするスニペットは、展開可能とはみなされません。
</p>

<p>一方で、この戦略は、<code>yas/key-syntaxes</code> 変数によって容易にカスタマイズできます。
設定するのは、構文ルールのリストです。
そのデフォルトの値は <code>(&quot;w&quot; &quot;w_&quot; &quot;w_.&quot; &quot;^ &quot;)</code> です。
これは、以下のものを snippet key が見つかるまで検索する、ということを意味します：
</p>

<ul>
  <li>単語</li>
  <li>シンボル（lisp では &quot;<code>-</code>&quot; および &quot;<code>?</code>&quot; はいずれもシンボルの一部となりえます）</li>
  <li>単語／シンボル／句読点のいずれかの文字の並び</li>
  <li>空白文字以外の文字の並び</li>
</ul>

<p>ただし、Emacs の構文ルールがどのように機能しているのか理解したいと思わないなら、デフォルトの値のままにしておくのがベターでしょう・・・・。
</p>

</div><!-- class="contents" -->

</body></html>
